/**
 ferror()，clearerr() #
所有的文件操作函数如果执行失败，都会在文件指针里面记录错误状态。后面的操作只要读取错误指示器，就知道前面的操作出错了。

ferror()函数用来返回错误指示器的状态。可以通过这个函数，判断前面的文件操作是否成功。它的原型定义在头文件stdio.h。

int ferror(FILE *stream);
它接受一个文件指针作为参数。如果前面的操作出现错误，ferror()就会返回一个非零整数（表示 true），否则返回0。

clearerr()函数用来重置出错指示器。它的原型定义在头文件stdio.h。

void clearerr(FILE* fp);
它接受一个文件指针作为参数，没有返回值。

下面是一个例子。

FILE* fp = fopen("file.txt", "w");
char c = fgetc(fp);

if (ferror(fp)) {
  printf("读取文件：file.txt 时发生错误\n");
}

clearerr(fp);
上面示例中，fgetc()尝试读取一个以”写模式“打开的文件，读取失败就会返回 EOF。这时调用ferror()就可以知道上一步操作出错了。处理完以后，再用clearerr()清除出错状态。

文件操作函数如果正常执行，ferror()和feof()都会返回零。如果执行不正常，就要判断到底是哪里出了问题。

if (fscanf(fp, "%d", &n) != 1) {
  if (ferror(fp)) {
    printf("io error\n");
  }
  if (feof(fp)) {
    printf("end of file\n");
  }

  clearerr(fp);

  fclose(fp);
}
上面示例中，当fscanf()函数报错时，通过检查ferror()和feof()，确定到底发生什么问题。这两个指示器改变状态后，会保持不变，所以要用clearerr()清除它们，clearerr()可以同时清除两个指示器。


*/